<?php
/**
* Controlador Cobranca
*  @filesource
 * @author			Marcos Rodrigo
 * @copyright		Copyright 2009 M2R
 * @package			broffices
 * @subpackage		broffices.application.controllers
 * @version			1.0
*/

class ConciliacaoBancariaController extends Zend_Controller_Action
{
	
	private $intTamPag;
	
	/**
	 * Este metodo sera executado sempre que a classe for instanciada,
	 * depois do construtor.
	 * Faz o carregamento das classes que serao usadas pelo controlador.
	 * @return void
	 */
	public function init()
	{
		Zend_Loader::loadClass('Cobranca');
		Zend_Loader::loadClass('Extrato');
		Zend_Loader::loadClass('CobrancaConciliada');
		
		// inicializando variaveis com valor padrao
		$this->intTamPag = 30;
	}

	/**
	 * Metodo que mostra a pagina inicial
	 * @return void
	 */
	public function indexAction()
	{
		// exibe tela
		$this->montaTela("conciliacaobancaria/bodyindex.tpl", 
							array(), 
							false);
	}
	
	/**
	 * Metodo que mostra o grid
	 * @return void
	 */
	public function tabelaAction()
	{
		$pag = 1;
		$post = Zend_Registry::get('post');
		if (isset($post->pag)) $pag = $post->pag;
		if (isset($post->tamPag)) $this->intTamPag = $post->tamPag;
		$anomes = $post->ano.$post->mes;
		$pago = $post->pago;
		$contrato_id = $post->cod_cliente;
		$nome = $post->nome_cliente;
		$dtInicio = $post->data_inicio;
		$dtFim = $post->data_fim;
		
		$arrCobrancasConciliadas = array();
		$busca = "";
		
		$inicio = ($pag>1) ? ($pag-1)*$this->intTamPag : 0;
		$fim = $inicio + $this->intTamPag;
		
		$arrBusca = array();
		$arrBusca["c.bln_ativo= ?"] = 1;
		if (!empty($anomes)) $arrBusca["c.vhr_ano_mes_referencia= ?"] = $anomes; 
		if($pago==="1"){
			$arrBusca["c.bln_pago= ?"] = 1; 
		}elseif($pago==="0"){
			$arrBusca["c.bln_pago<> ?"] = 1; 
		}
		if (!empty($contrato_id)) $arrBusca["e.contrato_id= ?"] = $contrato_id; 
		if (!empty($nome)) {$arrBusca["p.vhr_nome like ?"] = "%".$nome."%";} 
	
		if($dtInicio){
			$arrBusca["c.dte_vencimento >= ?"] = ConverteData($dtInicio,13);
			$arrOrdenacao[]="c.dte_vencimento ASC";
		}
		if($dtFim){
			$arrBusca["c.dte_vencimento <= ?"] = ConverteData($dtFim,13);
		}
		
		// Pegando conciliacaobancarias do banco de dados
		$tblCobranca = new Cobranca();
		$total = $tblCobranca->pegaTotalCobrancaExtratoINouNotIN($arrBusca);
		if ($fim>$total) $fim = $total;
		$totalPag = (int)(($total % $this->intTamPag == 0)?($total/$this->intTamPag):(($total/$this->intTamPag)+1));

		$rsCobranca = $tblCobranca->buscaCobrancaExtratoINouNotIN($arrBusca, 
									array("c.vhr_ano_mes_referencia DESC"), 
											$this->intTamPag, 
											$inicio);
											

		//RECUPERANDO OS PAGAMENTOS EFETUADOS DAS COBRANCAS	
		$tblCobrancaConciliada = new CobrancaConciliada();				
		foreach($rsCobranca as $cobranca)
		{
			if($cobranca->bln_pago == 1)
			{
				$rsCobrancaConciliada = $tblCobrancaConciliada->busca(array("cobranca_id="=>$cobranca->id), array("dte_pagamento ASC"));
				$arrAux = $rsCobrancaConciliada->toArray();
				if(!empty($arrAux))
				{
					//x($cobranca->id);
					//JOGA OS RESULTADOS NUM ARRAY NA POSICAO IDENTIFICADA PELO ID DA COBRANCA
					$arrCobrancasConciliadas[$cobranca->id] = $rsCobrancaConciliada;
				}
			}
		}
		
		//xd($arrCobrancasConciliadas);
		
		//xd($rsCobranca);
		$this->montaTela("conciliacaobancaria/bodytabela.tpl", 
							array("pag"=>$pag, 
									"total"=>$total, 
									"inicio"=>($inicio+1), 
									"fim"=>$fim,
									"totalPag"=>$totalPag,
									"cobrancas"=>$rsCobranca,
									"cobrancasconciliadas"=>$arrCobrancasConciliadas,
									"busca"=>$busca,
									"ano"=>$post->ano,
									"mes"=>$post->mes,
									"contrato_id"=>$post->cod_cliente,
									"nome_cliente"=>$post->nome_cliente,
									"pago"=>$post->pago,
									"data_inicio"=>$post->data_inicio,
									"data_fim"=>$post->data_fim,
									"urlEditar"=>"conciliacao-bancaria/editar",
									"urlApagar"=>"conciliacao-bancaria/apagar"), 
							false);
	}
	
	/**
	 * Metodo que mostra o formulario de novo
	 * @return void
	 */
	public function novoAction()
	{
		$this->montaTela("conciliacaobancaria/bodyform.tpl", 
				      		array("acao"=>"conciliacao-bancaria/enviar-arquivo"), 
							false);
	}
	
	/**
	 * Metodo que recebe arquivo cnab240
	 * @return void
	 */
	public function enviarArquivoAction()
	{
		$msg = '';
		$erro = '';
		$ct = 0;
			
		//VERIFICANDO SE ESTE ARQUIVO JA FOI INSERIDO ALGUMA VEZ NO PASSADO
		$hashCnab = md5_file($_FILES['arquivo']['tmp_name']);
		$tblCobrancaPorCnab = new Cobranca();
		$rsCobrancaPorCnab = $tblCobrancaPorCnab->busca(array("vhr_hashcnab="=>$hashCnab));
		
		if(count($rsCobrancaPorCnab->toArray())>0)
		{
			$erro = "Opera&ccedil;&atilde;o n&atilde;o realizada. Este arquivo j&aacute; foi enviado para concilia&ccedil;&atilde;o uma vez.";
		}else{
			if($_FILES){
	
				$cnab240 = $this->_helper->Cnab240->CNAB240($_FILES['arquivo']['tmp_name']);
				$registros = $cnab240->registro;
				
				//VERIFICANDO SE ALGUM REGISTRO FOI REALMENTE IMPORTADO DO ARQUIVO CNAB 
				if(!empty($registros))
				{
					//VERIFICANDO EXISTE MESMO DADOS REAIS NO ARRAY
					if(Zend_Date::isDate($registros[0]['dataPagamento']) == true && $registros[0]['dataPagamento'] != "")
					{
						$tblCobranca = new Cobranca();
						foreach($registros as $registro)
						{
							$arrBusca = array("int_nossonumero="=>$registro['nossoNumero']);
							$cobranca = $tblCobranca->busca($arrBusca)->current();
							$data = substr($registro['dataPagamento'], 4, 4)."-".substr($registro['dataPagamento'], 2, 2)."-".substr($registro['dataPagamento'], 0,2)." 00:00:00";
							if(count($cobranca) > 0)
							{
								//RECUPERANDO ID DA COBRANCA EM QUESTAO
								$cobranca_id = $cobranca->id;
							
								//GRAVANDO VALORES ESPECIFICOS DE CONBRANCA PAGA.
								// objeto modelo tabela CobrancaConciliada
								$tblCobrancaConciliada = new CobrancaConciliada();
								
								$dados = array("cobranca_id"=>$cobranca_id,
											   "flt_valorpago"=>$registro['valorPago'],
											   "dte_pagamento"=>$data,
											   "vhr_observacao"=>"Baixa via arquivo de retorno do banco.");
								
								$tblCobrancaConciliada->insert($dados);
								
								//SETANDO O REGISTRO DA TABELA TBL_COBRANCA COMO PAGO
								$cobranca->vhr_hashcnab = $hashCnab;
								$cobranca->bln_pago = 1;
								$cobranca->save();
							
								$ct++;
							}else{
								if($ct <= 0){
									$erro = "N&atilde;o h&aacute; registro de cobran&ccedil;a para conciliar!";
								}
							}
						}
						if($ct > 0){ $msg = $ct." registros conciliados com sucesso!"; }else{ $erro = "Nenhum registro conciliado!"; } 
					}else{
						$erro = "Arquivo inv&aacute;lido para concilia&ccedil;&atilde;o!";
					}
				}else{
					$erro = "Nenhum registro conciliado!"; 
				}
				
			}else{
				
				$erro = "Arquivo em branco";
			}
		}
				
		//formata mensagem no formato JSON
		$mensagem = "({ error: '".$erro."', msg: '".$msg."' })";	

		$this->montaTela("conciliacaobancaria/bodymensagem.tpl", 
							array("mensagem"=>$mensagem), 
							false);
	}
	
	public function gerarCsvAction()
	{
		$dtePagamento = "";
		$valorPago = "";
		$pag = 1;
		$get = Zend_Registry::get('get');
		$anomes = $get->ano.$get->mes;
		$pago = $get->pago;
		$contrato_id = $get->contrato_id;
		$dtInicio = $get->data_inicio;
		$dtFim = $get->data_fim;
		
		$arrCobrancasConciliadas = array();
		$busca = "";
		
		$arrBusca = array();
		$arrBusca["c.bln_ativo="] = 1;
		if (!empty($anomes)) $arrBusca["c.vhr_ano_mes_referencia="] = $anomes; 
		if($pago==="1"){
			$arrBusca["c.bln_pago="] = 1; 
		}elseif($pago==="0"){
			$arrBusca["c.bln_pago<>"] = 1; 
		}
		if (!empty($contrato_id)) $arrBusca["e.contrato_id="] = $contrato_id; 
		
		if($dtInicio){
			$arrBusca["c.dte_vencimento >= ?"] = ConverteData($dtInicio,13);
			$arrOrdenacao[]="c.dte_vencimento ASC";
		}
		if($dtFim){
			$arrBusca["c.dte_vencimento <= ?"] = ConverteData($dtFim,13);
		}
		
		// Pegando conciliacaobancarias do banco de dados
		$tblCobranca = new Cobranca();
		
		$rsCobranca = $tblCobranca->buscaCobrancaExtrato($arrBusca, 
									array("c.vhr_ano_mes_referencia DESC"));
									
		$html = "<table>";
		$html .= "<tr>
					<td width='250px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>CONTRATO</td>
					<td width='250px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>CLIENTE</td>
					<td width='200px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>No. EXTRATO</td>
					<td width='200px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>NOSSO NUMERO</td>
					<td width='200px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>MES/ANO REFERENCIA</td>
					<td width='200px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>DATA DE VENCIMENTO</td>
					<td width='200px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>DATA DE PAGAMENTO</td>
					<td width='150px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>VALOR COBRANCA</td>
					<td width='150px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>VALOR PAGO</td>
					<td width='100px' align='center' bgcolor='gray' style='border:1px #FFFFFF solid; background-color:#CCCCCC; font-weight:bold; color:#54859B;'>PAGO</td>
				 </tr>";
		
		foreach($rsCobranca as $cobranca)
		{
			$dtePagamento = "";
			$valorPago = "";
			$tblCobrancaConciliada = new CobrancaConciliada();
			if($cobranca->bln_pago == 1)
			{
				$rsCobrancaConciliada = $tblCobrancaConciliada->busca(array("cobranca_id="=>$cobranca->id), array("dte_pagamento ASC"))->current();
				$arrAux = $rsCobrancaConciliada->toArray();
				if(!empty($arrAux))
				{
					$dtePagamento = $rsCobrancaConciliada->dte_pagamento;
					$valorPago = $rsCobrancaConciliada->flt_valorpago;
				}
			}
			
			$html .= "
					<tr>
				        <td valign='top'>".$cobranca->contrato_id."</td>
				        <td valign='top'>".$cobranca->vhr_nome."</td>
				        <td valign='top' align='center'>".$cobranca->vhr_numextrato."</td>
				        <td valign='top' align='center'>".completaDigitosNossoNumero($cobranca->int_nossonumero)."</td>
				        <td valign='top' align='center'>".recuperarMesGeracaoExtrato(substr($cobranca->vhr_ano_mes_referencia, 4,2))." / ".substr($cobranca->vhr_ano_mes_referencia,0,4)."</td>
				        <td valign='top' align='center'>".ConverteData($cobranca->dte_vencimento,5)."</td>
				        <td valign='top' align='center'>".ConverteData($dtePagamento,5)."</td>
				        <td valign='top' align='center'>".$cobranca->flt_valor."</td>
				        <td valign='top' align='center'>".$valorPago."</td>
				        <td valign='top' align='center'>";
			
			if($cobranca->bln_pago==1){
				$html .= "<font>Sim</font>";
			}elseif($cobranca->bln_pago==0){
				$html .= "<font color='red'>N&atilde;o</font>";
			}
	
			$html .= "</td>";
			$html .= "</tr>";
		}
		$html .= "</table>";

		$this->getResponse()
			->setHeader('Content-Disposition', 'attachment; filename="lote_conciliacao.xls"')
			->setHeader('Content-type', 'application/vnd.ms-excel');
			
		echo utf8_decode($html);
		$this->_helper->viewRenderer->setNoRender(true);
		//xd($html);
		//RECUPERANDO OS PAGAMENTOS EFETUADOS DAS COBRANCAS	
		/*$tblCobrancaConciliada = new CobrancaConciliada();				
		foreach($rsCobranca as $cobranca)
		{
			if($cobranca->bln_pago == 1)
			{
				$rsCobrancaConciliada = $tblCobrancaConciliada->busca(array("cobranca_id="=>$cobranca->id), array("dte_pagamento ASC"));
				$arrAux = $rsCobrancaConciliada->toArray();
				if(!empty($arrAux))
				{
					//x($cobranca->id);
					//JOGA OS RESULTADOS NUM ARRAY NA POSICAO IDENTIFICADA PELO ID DA COBRANCA
					$arrCobrancasConciliadas[$cobranca->id] = $rsCobrancaConciliada;
				}
			}
		}*/
	}
	
/**
	 * Monta a tela de retorno ao usuario
	 * @param string $corpo - arquivo tpl do corpo
	 * @param array $dados - array com os dados a serem inseridos na tela, no seguinte formato "nome"=>"valor"
	 * @param boolean $exibeHeader - true ou false para exibir header, menu e rodape 
	 * @return void
	 */
	public function montaTela($corpo, $dados=array(), $exibeHeader=true)
	{
		// iniciando view
		$view = Zend_Registry::get('view');
		// setando corpo
		$view->assign('_corpo',$corpo);

		// pegando variaveis globais do site
		$_site = Zend_Registry::get("site");
		// setando variaveis globais ao template
		$view->assign('_site', $_site);
		
		// percorrendo array de dados e inserindo no template
		foreach ($dados as $dado=>$valor)
		{
			$view->assign($dado, $valor);
		}
		
		// define o template master
		$tplLayout = $_site["layout"];
		// se exibirHeader for verdadeiro
		if ($exibeHeader)
		{
			// adiciona cabecalho
			$view->assign('_cabecalho', $_site["header"]);
			// adiciona menu
			$view->assign('_menu', $_site["menu"]);
			// adiciona rodape
			$view->assign('_rodape', $_site["footer"]);
		}
		// se exibirHeader for falso
		else
		{
			// define template master sem cabecalho
			$tplLayout = $_site["layout_sem_header"];
		}
		// retorna o tempalte master, com corpo e variaveis setadas
		$view->output($tplLayout);
	}
	
}